// pages/add/add.js
import api from '../../utils/api';
import Toast from '@vant/weapp/toast/toast';
const app = getApp()
Page({

    /**
     * 页面的初始数据
     */
    data: {
        taskStartTime: [],
        // 多点日期
        calendarShow: false,
        // 单日日期
        dayShow: false,
        // 日期区间
        sectionShow: false,
        option: [{
                text: '请选择日期类型',
                value: '0'
            },
            {
                text: '选择单个日期',
                value: '1'
            },
            {
                text: '选择多个日期',
                value: '2'
            },
            {
                text: '选择日期区间',
                value: '3'
            },
        ],
        value: '0',
        // 选择起始时间
        currentDate: '12:00',
        // 标题信息处理
        titleInfo: null,
        // 日期标题
        timeTitle: null,
        // 开始和结束时间
        stratTime: null,
        endTime: null,
        // 总时长
        totalTime: '--',
        // 备注
        remarks: null,
        // 提醒开关
        startChecked: false,
        endChecked: false,
        // 时间开启
        timeShowSection: false,
        HsSelect: true,
        title: "添加计划",
        is_planTitle: '确认计划',
        plan_id: null,
        // 存个旧的
        oldPlan:[]
    },
    // 日期选择
    timeSelect(e) {
        // 获取信息弹出对应弹窗
        this.setData({
            value: e.detail
        })
        switch (e.detail) {
            case '1':
                this.setData({
                    dayShow: true
                })
                break;
            case '2':
                this.setData({
                    calendarShow: true
                })
                break;
            case '3':
                this.setData({
                    sectionShow: true
                })
                break;
            default:
                break;
        }
    },

    // 标题处理
    titleChange(e) {
        this.setData({
            titleInfo: e.detail
        })
    },
    // 多点 timeTitle
    calendarClose() {
        this.setData({
            calendarShow: false
        })
    },
    calendarConfirm(e) {
        let value = e.detail
        let list = []
        for (const i in value) {
            list[i] = this.formatDate(value[i])
        }
        this.setData({
            calendarShow: false,
            taskStartTime: list,
            timeTitle: '选择了' + list.length + '个日期'
        })
    },

    // 单 timeTitle 如果得到的数据没有一律返回0 value:'0'
    dayClose() {
        this.setData({
            dayShow: false,
        })
    },
    dayConfirm(e) {
        let task = []
        task[0] = this.formatDate(e.detail)
        this.setData({
            dayShow: false,
            taskStartTime: task[0],
            timeTitle: task[0]
        })
    },

    // 区间 timeTitle
    sectionClose() {
        this.setData({
            sectionShow: false
        })
    },
    sectionConfirm(e) {
        let value = e.detail
        let list = []
        for (const i in value) {
            list[i] = this.formatDate(value[i])
        }

        let YM1 = list[0].split('-')
        let YM2 = list[1].split('-')
        let YM12 = 1
        if (parseInt(YM2[0]) - parseInt(YM1[0]) > 0) {
            // 如果年份不一样 12-10=2  1
            YM12 = 12 - parseInt(YM1[1]) + parseInt(YM2[1]) + 1
        } else {
            // 如果年份一样
            YM12 = parseInt(YM2[1]) - parseInt(YM1[1]) + 1
        }
        let days
        // 根据月份差值来决定走几步
        let mon
        let ye
        let cha = 1
        let cha2 = 1
        let lists = []
        mon = parseInt(YM1[1])
        ye = parseInt(YM1[0])
        for (let i = 0; i < YM12; i++) {
            // 获取到了天数
            days = this.mGetDate(ye, mon)
            if (i == 0) {
                // 如果是第一次进入
                cha = parseInt(YM1[2])
                days = days - cha + 1
            } else if (i == YM12 - 1) {
                // 如果是最后一个月
                cha = 1
                cha2 = parseInt(YM2[2])
                days = cha2
            } else {
                cha = 1
                cha2 = 1
            }
            if (YM12 == 1) {
                cha = parseInt(YM1[2])
                cha2 = parseInt(YM2[2])
                days = cha2 - cha + 1
            }
            lists = [...lists, ...this.getTimeList(days, ye, mon, cha)]
            mon++
            if (mon == 13) {
                ye++
                mon = 1
            }
        }
        this.setData({
            sectionShow: false,
            taskStartTime: lists,
            timeTitle: list[0] + '至' + list[1]
        })
    },
    // 获取月份天数
    mGetDate(year, month) {
        var d = new Date(year, month, 0);
        return d.getDate();
    },
    // 返回所有日期
    getTimeList(len, year, month, day = 0) {
        let list = []
        for (let index = 0; index < len; index++) {
            list[index] = year + '-' + month + '-' + day
            day++
        }
        return list
    },
    // 时间选择开启
    startTap() {
        this.setData({
            timeShowSection: true,
            HsSelect: true
        })
    },
    endTap() {
        this.setData({
            timeShowSection: true,
            HsSelect: false
        })
    },
    HsConfirm(e) {
        this.setData({
            timeShowSection: false
        })
        if (this.data.HsSelect) {
            this.setData({
                stratTime: e.detail
            })
        } else {
            this.setData({
                endTime: e.detail
            })
        }
        if (this.data.stratTime != null && this.data.endTime != null) {
            // 处理一下日期格式 返回的是一个字符串，使用 ： 隔开
            // 转换数组
            let start = this.data.stratTime.split(':')
            let end = this.data.endTime.split(':')
            let time = null
            if (parseInt(start[0]) > parseInt(end[0]) ||
                parseInt(start[0]) == parseInt(end[0]) &&
                parseInt(start[1]) > parseInt(end[1]) || parseInt(start[0]) == parseInt(end[0]) &&
                parseInt(start[1]) == parseInt(end[1])) {
                // 第二天的处理方法,直接弹出重选，并清空结尾数据
                this.setData({
                    endTime: null,
                    totalTime: '--'
                })
                Toast('请重新选择！');
            } else {
                if (parseInt(start[0]) == parseInt(end[0])) {
                    // 小时相等的处理方法
                    time = parseInt(end[1]) - parseInt(start[1])
                } else {
                    time = (parseInt(end[0]) - parseInt(start[0]) - 1) * 60 + (60 - parseInt(start[1])) + parseInt(end[1])
                }
                this.setData({
                    totalTime: time + 'min'
                })
            }
        }
    },
    HsClose() {
        this.setData({
            timeShowSection: false
        })
    },
    // 时间格式
    formatDate(date) {
        let taskStartTime
        if (date.getMonth() < 9) {
            taskStartTime = date.getFullYear() + "-0" + (date.getMonth() + 1) + "-"
        } else {
            taskStartTime = date.getFullYear() + "-" + (date.getMonth() + 1) + "-"
        }
        if (date.getDate() < 10) {
            taskStartTime += "0" + date.getDate()
        } else {
            taskStartTime += date.getDate()
        }
        return taskStartTime;
    },
    // 备注信息
    remasksChange(e) {
        this.setData({
            remarks: e.detail
        })
    },
    // 提醒开关 判断是否完善信息
    startRemindTap() {
        if (app.globalData.userInfo.email != '' && app.globalData.userInfo.email != null) {
            this.setData({
                startChecked: this.data.startChecked ? false : true
            })
        } else {
            Toast('请先在‘我的’页面设置邮箱~');
        }
    },
    endRemindTap() {
        if (app.globalData.userInfo.email != '' && app.globalData.userInfo.email != null) {
            this.setData({
                endChecked: this.data.endChecked ? false : true
            })
        } else {
            Toast('请先在‘我的’页面设置邮箱~');
        }

    },
    // 确认计划
    yesTap() {
        let title = this.data.titleInfo
        let time = this.data.taskStartTime
        let start = this.data.stratTime
        let end = this.data.endTime
        let totalTime = this.data.totalTime
        let remarks = this.data.remarks
        let remindS = this.data.startChecked
        let remindE = this.data.endChecked
        let newPlan = [title,time,start,end,totalTime,remarks,remindS,remindE]
        if (title&&time[0]&&start&&end) {
            let value = {
                title: title,
                startTime: start,
                endTime: end,
                date: time,
                duration: totalTime,
                remark: remarks,
                is_Start: remindS ? 0 : 1,
                is_End: remindE ? 0 : 1,
            }
            if (this.data.title == '修改计划') {
                let planId = {
                    plan_id: this.data.plan_id
                }
                value = {
                    ...value,
                    ...planId
                }
                api.postUpdatePlan(value).then((res) => {
                    console.log(res)
                    if (res.status == 0) {
                        Toast('修改成功~');
                    } else {
                        Toast('修改失败！');
                    }
                })
            } else {
                // 判断一下是否冲突  存一个
                if (this.data.oldPlan.toString() == newPlan.toString()) {
                    Toast('与上次添加一致,请修改后添加~');
                }else{
                    api.postAddPlain(value).then((res) => {
                        // console.log(res)
                        if (res.status == 0) {
                            this.setData({
                                oldPlan:newPlan
                            })
                            Toast('添加成功~');
                        } else {
                            Toast('添加失败！');
                        }
                    })
                }
            }

        } else {
            Toast('请填写完整再添加哦！');
        }

    },
    /**
     * 生命周期函数--监听页面加载
     */
    onLoad(options) {
        if (options.model) {
            let info = JSON.parse(options.model)
            let timeSk = 'taskStartTime[' + (0) + ']'
            this.setData({
                titleInfo: info.title,
                stratTime: info.startTime,
                endTime: info.endTime,
                timeTitle: info.date,
                totalTime: info.duration,
                remarks: info.remark,
                startChecked: info.is_Start == 0 ? true : false,
                endChecked: info.is_End == 0 ? true : false,
                [timeSk]: info.date,
                title: '修改计划',
                is_planTitle: '确认修改',
                plan_id: info.plan_id
            })
            wx.setStorageSync('timeP', info.date)
        }


    },

    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady() {

    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow() {
        wx.setStorageSync('aShow', true)
        wx.setStorageSync('bShow', true)
    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide() {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload() {

    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh() {

    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom() {

    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage() {

    }
})